<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>算数运算符</title>
</head>
<body>
    
</body>
</html>
<script>
    /*
        运算符也叫操作符
            通过运算符可以对一个或多个值进行运算, 并获取运算结果
            比如 typeof 就是运算符，可以来获得一个值的类型
                他会将该值的类型以字符串的形式返回
                number string Boolean undefined object

         算数运算符
            当对非number类型的值进行运算时，会将这写值转换为number然后再运算
                任何值和NaN做运算都的NaN
            + 
                + 可以对两个值进行加法运算，并将结果返回
                如果对两个字符串进行加法运算，则会做 拼串
                    会将两个字符串拼接为一个字符串，并返回
                任何的值和字符串做加法运算，都会先转换为字符串，然后再和字符串做拼串的操作
            -
                - 可以对两个值进行减法运算，并将结果返回

            *
                - 可以对两个值进行乘法运算
            /
                - 可以对两个值进行除法运算
            %
                - 取模运算 （取余数）

    */
    
    var a = 123;
    a = a + 1;
    a += 1;
    a + 1; //对原a无效;
    var result = typeof a;

    console.log(a);
    console.log(typeof a);
    console.log(typeof result);

    result = a + 1;
    result = true + false;
    result = true + 1;
    result = 2 + null;
    result = 2 + NaN;

    result = "123"+"456" // 拼串 "123456"  typeof 检查显示 String类型
    result = "你好"+"殷周宇";
    /*
    var str = "锄禾日当午，
                汗滴禾下土"   // 双引号不能换行
    */
    var str = "锄禾日当午，"
              "汗滴禾下土"  // 只能输出第一行  缺少 + 号
    console.log(str);

    str = "锄禾日当午，"+
              "汗滴禾下土" 
    console.log(str);

    str = 123 + "123";
    str = NaN + "123";
    str = null + "hello";
    console.log(str);

    //任何值和字符串相加都会转换为字符串，并做拼串操作
    /*
        我们可以利用在这一特性 ，来将一个任意的数据类型转换为 String
            我们只需要为任意的数据类型 + "" 空串 即可将其转换为String
            这是一个隐式的类型转换，有浏览器自动完成，实际上它也是调用String() 函数
    */
    var c = 123;
    c = c + "";

    // 用上面的特性将 null 转换为 String 类型
    c = null;
    c = c + "";

    console.log(typeof c);
    console.log("c = "+c);

    result = 1 + 2 + "3";
    console.log("result = "+result);

    result = "1" + 2 + 3;
    console.log("result = "+result);

    //=============================减法运算===========================================
    console.log("================减法运算=================");

    result = 100 - 5 ;  //95

    result = 100 - true;    //99

    result = 100 - false;   //100

    result = 100 - "4";     //96 会转换成 Number 进行计算
    console.log("result = "+result);
    //===============================乘法运算=========================================
    console.log("================乘法运算=================");

    result = 4 * 4;     // 16
    result = 4 * "8";   // 32
    result = 4 * NaN;   // NaN
    result = 4 * null;  // 0
    result = 4 * true;  // 4 
    result = 4 * false; // 0
    result = 4 * undefined; // NaN
    result = 4 * "你好";    // NaN 
    console.log("result = "+result);
    //==============================除法运算==========================================
    console.log("================除法运算=================");

    result = 4 / 2;    // 2
    result = 3 / 2;     // 1.5
    result = 2 / 3;
    result = 10 / 3;
    console.log("result = "+result);

    //================================= 扩展 ===============================
    /*
        任何值做 - * / 运算时都会自动转换为Number
            我们可以利用这一特点做隐式的类型转换
                可以通过为一个值 -0 *1 /1来将其转换为Number
                原理和 Number() 函数一样，使用起来更加简单
    */
    var d = "123";

    result = 1 * d;
    result = d / 1;
    
    console.log("类型为 :" + typeof result);
    console.log("result = "+result);
    /*=============================== % 取模运算（取余数）=========================================*/

    result = 9 % 3;
    result = 9 % 4;
    result = 10 % 3;

    console.log("result ="+result);


</script>